/*
 * 文件名：MessageCallBack.java	 
 * 时     间：下午12:02:12
 * 作     者：lyf      
 * 版     权： 2012-2022 湖南智软网络科技, 公司保留所有权利.
 * 联     系：http://www.073586.com/
 */
package com.message.callback;

import java.util.ArrayList;
import java.util.List;

import com.cz073586.tools.util.JsonUtil;
import com.cz073586.tools.util.Tools;
import com.message.entity.TransDataVo;
import com.message.handler.face.ResponceHandler;
import com.message.utils.MessageCfgManager;
import com.qianhai.common.constants.CommonContans;
import com.qianhai.common.exception.BaseException;
import com.qianhai.common.spring.utils.SpringContextUtil;

import common.message.receive.call.MessageCallBackTemplate;

/**
 * 类描述:消息处理
 * 
 * @ClassName: MessageCallBack
 * @author liyf
 * @date 2015年10月11日 下午12:02:12
 */
public class MessageCallBack extends MessageCallBackTemplate
{
	
	@SuppressWarnings("rawtypes")
	@Override
	public List<String> invokMessage(List<String> listMessage)
	{
		List<String> listResult = new ArrayList<String>();
		try
		{
			// 只处理一个一个参数
			if (!listMessage.isEmpty())
			{
				TransDataVo transData = JsonUtil.fromJson(listMessage.get(0),
						TransDataVo.class);
				if (Tools.isEmpty(transData))
				{
					throw new BaseException("10000-10000-20001");
				}
				
				if (Tools.isEmpty(transData.getMessageType()))
				{
					throw new BaseException("10000-10000-20002");
				}
				
				// 获取响应对象
				String handlerCls = MessageCfgManager.instance()
						.getCfgPropertiesByKey(transData.getMessageType());
				if (Tools.isEmpty(handlerCls))
				{
					throw new BaseException("10000-10000-20003");
				}
				
				ResponceHandler handler = (ResponceHandler) Class.forName(
						handlerCls).newInstance();
				TransDataVo handlerDataVo = handler.resoponse(
						SpringContextUtil.getApplicationContext(), transData);
				
				if (!Tools.isEmpty(handlerDataVo))
				{
					handlerDataVo.setResult(!Tools.isEmpty(handlerDataVo.getResult())?handlerDataVo.getResult():CommonContans.STRUTS_SUCCESS);
					handlerDataVo.setMessageType(transData.getMessageType());
					listResult.add(JsonUtil.getJsonString(handlerDataVo));
				}
				
			}
		} catch (Throwable t)
		{
			TransDataVo transData = new TransDataVo();
			transData.setResult(CommonContans.STRUTS_ERROR);
			transData.setErrorCode(t.getMessage());
			transData.setErrorMsg(t.getMessage());
			if (t.getMessage().equals("10000-10000-20001"))
			{
				transData.setErrorMsg("无法获取消息内容.");
			}
			
			if (t.getMessage().equals("10000-10000-20002"))
			{
				transData.setErrorMsg("请指定消息类型.");
			}
			
			if (t.getMessage().equals("10000-10000-20003"))
			{
				transData.setErrorMsg("客户端无法响应请求或找不到响实现.");
			}
			listResult.add(JsonUtil.getJsonString(transData));
		}
		return listResult;
	}
}
